package lambda;

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @author shentianyu
 * @date 2021-06-16 00:14
 *
 * 语法格式一：无参无返回
 * () -> System.out.println();
 *
 * 语法格式二：有一个参数并且无返回值
 * (x) -> System.out.println(x);
 *
 * 语法格式三：只有一个参数，小括号可以省略
 * x -> System.out.println(x);
 *
 * 语法格式四：有两个以上的参数，并且lambda体中有多条语句，有返回值
 * (o1,o2)->{
 *             System.out.println("函数式接口");
 *             return Integer.compare(o1,o2);
 *         };
 *
 * 语法格式五：有两个以上的参数有返回值，只有一条语句，大括号和return都可以省略
 * (o1,o2)-> return Integer.compare(o1,o2);
 *  *
 *
 *  语法格式六：lambda表达式的参数列表的数据类型可以省略，因为JVM编译器可以通过上下文推断出参数类型
 *
 *  函数式接口，只有一个抽象方法，可以用注解@FunctionalInterface修饰
 *
 */
public class TestLambda2 {
    public static void main(String[] args) {
//        Runnable r1 = ()->System.out.println("Hello Lambda!");
//        r1.run();
//
//        Consumer<String> consumer = (x) ->System.out.println(x);
//        consumer.accept("Hello World!");
//
//        Comparator<Integer> comparator = (o1,o2)->{
//            System.out.println("函数式接口");
//            return Integer.compare(o1,o2);
//        };
        System.out.println(cal(100l, 200l, (l1, l2) -> l1 + l2));
        System.out.println(cal(100l, 200l, (l1, l2) -> l1 * l2));

    }

    public static Long cal(Long l1, Long l2,MyInterface<Long,Long> myInterface){
        return myInterface.calculate(l1,l2);
    }
}
